
//  对两个次数进行10亿次++操作 分别使用一个线程 和 两个线程

public class demo1 {

    private static final long count = 10_0000_0000;

    //    一个线程情况
    public static void singleThread() {
        long start = System.currentTimeMillis();//计算开始时间
        long a = 0;
        for (long i = 0; i < count; i++) {
            a++;
        }
        long b = 0;
        for (long i = 0; i < count; i++) {
            b++;
        }
        long end = System.currentTimeMillis();//计算结束时间
        System.out.println("耗时: " + (end-start) + "ms");
    }

    //    两个线程情况  注意我们在创建线程也会消耗时间
    public static void doubleThread() throws InterruptedException {
        long start = System.currentTimeMillis();//计算开始时间

        Thread t1 = new Thread(() -> {
            long a = 0;
            for (long i = 0; i < count; i++) {
                a++;
            }
        });
        t1.start();

        Thread t2 = new Thread(() -> {
            long b = 0;
            for (long i = 0; i < count; i++) {
                b++;
            }
        });
        t2.start();

//        此处不能直接这么记录结束时间 现在这个求时间戳的代码是在main线程中
//        main和t1 t2 之前并发执行关系 此处t1t2还没有执行完 这里就开始记入结束时间了 这是不准确的
//        正确的做法是让main等待t1t2跑完 再来记录结束时间
//        join 效果就是等待线程结束t1.join就是让main线程等待t1结束 t2.join让main线程等待t2结束
        t1.join();//添加异常处理
        t2.join();
        long end = System.currentTimeMillis();//计算结束时间
        System.out.println("耗时: " + (end-start) + "ms");
    }
    public static void main(String[] args) throws InterruptedException {
        singleThread();//大约780ms
        doubleThread();//大约400ms
    }
}
